<?php
//项目初始化类,框架类

class frame {
	//项目入口方法
	public static function run() {
		//定义基础目录常量
		static::initconst();
		//初始化配置
		static::initconfig();
		//确定分发参数
		static::initdispatchparam();
		//定义与平台相关的目录常量
		static::initplatformconst();
		//注册自动加载方法
		static::initautoload();
		//请求分发
		static::initdispatch();
	}
	//定义基础目录常量
	private static function initconst() {
		//定义目录常量
	define('ROOT_DIR',str_replace('\\','/', getcwd()).'/');
	//定义目录程序目录常量
	define('APP_DIR', ROOT_DIR. 'App/');
	//框架目录常量
	define('FRAME_DIR', ROOT_DIR. 'Frame/');
	//配置文件目录常量
	define('CONFIG_DIR', APP_DIR. 'Config/');
	//dao目录常量
	define('DAO_DIR', FRAME_DIR. 'dao/');
	//插件目录常量
	define('VENDOR_DIR', ROOT_DIR. 'Vendor/');
	//Smarty目录常量
	define('SMARTY_DIR', VENDOR_DIR. 'Smarty/');
	//Public目录常量
	define('PUBLIC_DIR', VENDOR_DIR. 'Smarty/');

	}

	//初始化配置
	private static function initconfig() {
		$GLOBALS['conf'] = include CONFIG_DIR . 'conf.php';
		// var_dump($GLOBALS);die;

	}

	private static function initdispatchparam() {

		////确定分发参数p控制器,保存在一个常量中
		//$default_platform = 'Test';
		// var_dump( $GLOBALS['conf']['App']);die;
		$default_PLATFORM = $GLOBALS['conf']['App']['default_platform'];
		define('PLATFORM',isset($_GET['p']) ? $_GET['p'] : $default_PLATFORM);
		//确定分发参数c控制器,保存在一个常量中
		$default_controller = $GLOBALS['conf'][PLATFORM]['default_controller'];
		define('CONTROLLER',isset($_GET['c']) ? $_GET['c'] : $default_controller);
		//确定分发参数a动作,保存在一个常量中
		$default_action = $GLOBALS['conf'][PLATFORM]['default_action'];
		define('action', isset($_GET['a']) ? $_GET['a'] : $default_action);
	}

	private static function initplatformconst() {
	// 当前平台的控制器目录
	define('CURRENT_CON_DIR',APP_DIR . PLATFORM. '/Controller/');
	//当前平台的模型目录
	define('CORRENT_MODEL_DIR',APP_DIR . PLATFORM. '/Model/');
	//当前平台的视图目录
	define('CURRENT_VIEW_DIR',APP_DIR . PLATFORM. '/View/');
	//以下三个目录常量只能用相对路径而且与平台相关
	define('CSS_DIR','/Public/' . PLATFORM . '/css');
	define('JS_DIR','/Public/' . PLATFORM . '/js');
	define('IMAGES_DIR','/Public/' . PLATFORM . '/images');

	}

		//实现自动加载文件
		public static function autoload($class_name) {
			//键 => 值
			//类名 =>类文件地址
			$frame_class_list = array(
			'controller'=>FRAME_DIR . 'controller.class.php',
			'Model'		=>FRAME_DIR . 'Model.class.php',
			'factory'	=>FRAME_DIR . 'factory.class.php',
			'MySQLDB'	=>DAO_DIR . 'MySQLDB.class.php',
			'PDODB'		=>DAO_DIR . 'PDODB.class.php',
			'I_DAO'		=>DAO_DIR . 'I_DAO.interface.php',
			'Smarty'	=>SMARTY_DIR . 'Smarty.class.php',
			'Captcha'	=>VENDOR_DIR . 'Captcha.class.php',
			);
			// echo "here";die;
			// echo substr($class_name,-5);
			// echo '<br/>';
			// die;
			if(isset($frame_class_list[$class_name])) {
				include $frame_class_list[$class_name];
			}
			elseif(substr($class_name,-10) == 'Controller') {
				include CURRENT_CON_DIR . $class_name. '.class.php';
			}
			elseif(substr($class_name,-5) == 'Model') {
			//ECHO CORRENT_MODEL_DIR .$class_name. '.class.php'."<br/>";
			include CORRENT_MODEL_DIR .$class_name. '.class.php';
		}
	}
	//注册自动加载
	private static function initautoload() {
		spl_autoload_register(array(__CLASS__,'autoload'));
	}

	private static function initdispatch() {
		//实例化控制类
		$controller_name = CONTROLLER . 'Controller';//确定控制器的名称
		$controller = new $controller_name;//可变类
		//调用方法
		$action_name = action . 'action';
		$controller->$action_name();
	}
}